package java101;

public class InClass5 {

	public static void main(String[] args) {

		//source menu - generate getters and setters
		//"private" just makes something available in its class
		
		
		//Properties of Objects:
			//Identity
				//Each object refers to a unique point in memory despite their values.
		
				//a = new Integer(2) 
				//b = new Integer (2) - two different memory allocations
		
				//To see if object identity is the same - if (a == b) - This would be false.
				// if a = new Integer (2) and b = a; Then if (a == b) is true.
			
			//Behavior
				//Behavior is represented by methods
		
			//State
				//Determines attributes of an object at a point in time.
				//Mostly refers to the fields and the values of those fields.
				
			//Type
				//Class name is generally type.
				//InClass5 is type.
				//Type actually refers to the type of the variable. a = new Integer(2) is of type integer because it references an integer.
		
		//Types of things in classes:
			//Class is like a blueprint
			//Fields (Objects referenced in a class), methods, constructor (Always named after the class, and it's capitalized because it's named after the class, and it has no return type because it returns the object itself.), initializers (runs before constructors.), other classes (class within a class is called a nested class).
		
		//Java automatically creates a default constructor if you don't create one. Ex. InClass5(). It takes no arguments
		
		//Overloading methods:
			// void methodName (String a, String b) { is same as void methodName (String c, String d) {, but is different than void methodName (String a)
			// void methodName (String a) will not work with int methodName (String a)
			// Order also matters (String a, int b) will work with (int b, String a)
			// void methodName (int a, String b, String...opts) { Will allow you to add int and then any number of strings because String...opts will create an array of strings.
				// System.out.format uses this.
			
//		public void methodName (int a, String b, String...opts) {
//			for (String opt : opts) {
//				
//			}
//			System.out.format(arg0, arg1);
//		}
		
		//Inheritance:
			//Behavior (fields) and state (methods) can be inherited from other classes.
			//Create a base class (superclass) and then subclasses that can inherit the methods.
			//Say the subclass extends the base class.
			//Classes implicitly extends java.lang.object
			
		
		//There are Math.toRadians and Math.toDegrees methods.
		
		//Protected = package access (any code in package can access the field) and subclasses can access it.
		
		//f4 will show type hierarchy - ctrl + o will show stuff.
		
		//Assignment 9 hints - write method in GeoPoint class distToPoint(GeoPoint o) - the other point.
			//return a double of distance in miles.
		
		//Extra Credit - look up lat and long for city. 
		
		//Read book 3 chaps. 3, 4, and 5.
		
	}

}
